#include <stdio.h>      // 包含标准输入/输出库
#include <string.h>     // 包含字符串操作库

void swap(char *x, char *y) {   // 定义一个名为swap的函数，接受两个char指针作为参数
    char temp;                  // 声明一个名为temp的char变量
    temp = *x;                  // 将x指向的内存位置的值赋给temp
    *x = *y;                    // 将y指向的内存位置的值赋给x
    *y = temp;                  // 将temp的值赋给y指向的内存位置
}

void permute(char *a, int l, int r) {  // 定义一个名为permute的函数，接受一个char指针和两个整数作为参数
    int i;                      // 声明一个整数i
    if (l == r) {               // 检查左索引和右索引是否相等
        printf("%c%c%c\n", a[0], a[1], a[2]);   // 如果相等，打印a[0]、a[1]和a[2]处的字符
    } else {
        for (i = l; i <= r; i++) {  // 从l循环到r
            swap((a + l), (a + i)); // 调用swap函数，交换a+l和a+i处的字符
            permute(a, l + 1, r);   // 递归调用permute，左索引加一
            swap((a + l), (a + i)); // 回溯，将a+l和a+i处的字符交换回原来的位置
        }
    }
}

int main() {    // 定义主函数
    char str[] = "1234";    // 声明并初始化一个名为str的字符数组
    int n = strlen(str);    // 获取字符串的长度并赋值给n
    permute(str, 0, n - 1); // 调用permute函数，传入字符串、起始索引0和结束索引n-1
    return 0;   // 返回0以表示执行成功
}
